package c12Swing;

import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.KeyEvent;
import java.net.URL;

import javax.swing.ImageIcon;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.SwingUtilities;

/**
 * 本例中，创建一个JTabbedPane，并为这个tab添加是个panel，
 * 随着标签头点击变动，显示不同的panel。
 *
 * @author ywlPC
 */
@SuppressWarnings("serial")
public class TestJTabbedPane extends JPanel {

	public TestJTabbedPane() {
		//设置布局管理器，默认的布局管理器是 BorderLayout,这里没那么复杂
		//选择GridLayout(1,1)即可，就是整个为一块
		super(new GridLayout(1, 1));

		//创建JTabbedPane
		JTabbedPane tabbedPane = new JTabbedPane();
		//创建标签显示的图标
		ImageIcon icon = createImageIcon("images/middle.gif");


		//创建第一个标签下的panel
		JPanel panel0 = createPanel("panel0");
		//指定标签名，标签图标，panel，和提示信息
		tabbedPane.addTab("panel0", icon, panel0, "do noting");
		//设置标签的快捷键
		tabbedPane.setMnemonicAt(0, KeyEvent.VK_0);


		//第二个标签
		JPanel panel1 = createPanel("panel1");
		tabbedPane.addTab("panel1", icon, panel1, "do noting");
		tabbedPane.setMnemonicAt(1, KeyEvent.VK_1);

		//第三个标签
		JPanel panel2 = createPanel("panel2");
		tabbedPane.addTab("panel2", icon, panel2, "do noting");
		tabbedPane.setMnemonicAt(2, KeyEvent.VK_2);

		//第四个标签
		JPanel panel3 = createPanel("panel3");
		tabbedPane.addTab("panel3", icon, panel3, "do noting");
		tabbedPane.setMnemonicAt(3, KeyEvent.VK_3);
		//设置合适的显示尺寸，这个是必须的，因为如果所有的标签都
		//不指定适合的显示尺寸，系统无法判断初始显示尺寸大小
		//默认是使用最小化，并且对一个标签设计即可
		tabbedPane.setPreferredSize(new Dimension(500, 500));

		//将tabbedPanel添加到Jpanel中
		add(tabbedPane);

		//设置窗口过小时，标签的显示策略
		tabbedPane.setTabLayoutPolicy(JTabbedPane.SCROLL_TAB_LAYOUT);
		//设置标签停放的位置，这里设置为左侧停放
		tabbedPane.setTabPlacement(JTabbedPane.TOP);

	}


	private JPanel createPanel(String string) {
		//创建一个JPanel，并为构造函数初始false
		//表示不适用双缓冲
		JPanel panel = new JPanel(false);

		//设置布局
		panel.setLayout(new GridLayout(1, 1));

		//创建一个label放到panel中
		JLabel filler = new JLabel(string);
		filler.setHorizontalAlignment(JLabel.CENTER);
		panel.add(filler);
		return panel;
	}


	private ImageIcon createImageIcon(String string) {
		URL url = TestJTabbedPane.class.getResource(string);
		if (url == null) {
			System.err.println("the image " + string + " is not exist!");
			return null;
		}
		return new ImageIcon(url);
	}


	public static void createAndShowGUI() {
		JFrame frame = new JFrame("table panel test");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

		frame.add(new TestJTabbedPane());

		frame.pack();
		frame.setVisible(true);


	}

	public static void main(String[] args) {
		SwingUtilities.invokeLater(new Runnable() {

			@Override
			public void run() {
				createAndShowGUI();
			}
		});
	}
}